/**
 * 需求：实现一个get接口，能够根据名字查询数据
 * 
 * 接口设计
 * 1、请求方式 get
 * 2、请求路径 /getHero
 * 3、参数 name
 * 
 * 实现思路
 * 1、创建服务器
 * 2、在createServer回调函数中，判断前端请求方式和请求地址
 *  2-1、如果判断符合条件，则判断前端请求是否有name参数
 *      2-1-1、如果有参数，则通过fs模块获取data.json中数据，
 *             然后根据name的值从数据中筛选对应的数据，并返回
 *      2-1-2、如果没有参数，则把所有数据都返回给前端  
 *  2-2、如果不符合条件，则请求结束返回404
 * */ 

const http  = require('http')
const fs = require('fs')

const server = http.createServer((req,res)=>{
    res.setHeader('Content-Type', 'text/html; charset=utf-8')
    console.log(req.url); //  包含了接口路径和参数
    // 目的：把请求路径和参数分离，可以利用split方法实现
    let arr = req.url.split('?')
    // console.log(25,arr);
    // 判断请求方式和请求方式 是否符合设计条件
    if(req.method==='GET'&&arr[0] === '/getHero'){
        // 获取data.json中的数据
        const data = fs.readFileSync('./data/data.json','utf-8')
        let allData = JSON.parse(data)
        // console.log(31,data, typeof data);
        // 符合 --- 判断是否有参数
        // 如果判断到数组中第二个元素存在则说明 有参数
        if(arr[1]){
            // 有参数 --- 根据参数返回数据
            // 我们发现参数是一个字符串，不利用使用
            // 那么接下来我们要把参数转换为对象形式，这样我们就可以方便使用了
            // {name: '小乔'}
            // 如何转换？答：js提供了一个方式，这个方式专门用来出来get请求参数的
            // 这个方法就是：URLSearchParams
            let query = new URLSearchParams(arr[1])
            // query是一个实例化对象，获取里面数据必须通过get来实现
            let name = query.get('name')
            // 根据name的值 筛选数据并返回
            let result = allData.filter(item=>{
                return item.name === name
            })
            res.end(JSON.stringify(result));
        }else{
            // 没有参数
            res.end(data)
        }
    }else{
        // 不符合
        res.statusCode = 404
        res.end('not found')
    }
})

server.listen(8001,()=>{
    console.log('服务器启动成功：http://localhost:8001');
})